import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author 颜培轩
 * @date 2018年08月15日  下午 04:56
 */
public class test {
    public static class Base {

        private static String name = "base";

        public Base() { //  2. new Base对象
            System.out.println("Base tell name: " + name);
            tellName(); //  3. 执行tellName()方法 是在继承的类中重写了该方法 所以去继承的类中去执行
            printName(); // 5. 执行printName()方法 是在继承的类中重写了该方法 所以去继承的类中去执行
        } // 7. new Base对象结束后，返回继承的类中 再去加载他类中的变量

        public void tellName() {
            System.out.println("Base tell name: " + name);
        }

        public void printName() {
            System.out.println("Base print name: " + name);
        }
    }

    /**
     * 测试new一个对象的执行顺序
     *
     * @author wangtengfei-ds
     */
    public class Dervied extends Base {

        private String name = "dervied"; // 8. 这是第八步 加载变量 是 真正的意义上的在本类中去操作

        public Dervied() { // 9. 无参构造的方法
            tellName();  // 10. 执行本类中的方法  此时的name变量是已经赋值加载了的
            printName(); // 12. 执行本类中的方法
        }

        public void tellName() { // 4. 此方法是重写的被继承的类中的方法
            System.out.println("Dervied tell name: " + name);
        }

        public void printName() { // 6. 此方法是重写的被继承的类中的方法
            System.out.println("Dervied print name: " + name);
        }

    }

    public void hello() {
        new Dervied();    // 1 ：main函数是程序的入口执行 因为Dervied继承Base，所以new对象的时候先去new 了一个Base对象
    }

    public static void main(String[] args) {
       /* new test().hello();
        new test().hello();*/
//        arr[test()] += "a";
//        arr1[test()] += 1;

        Map<String, Integer> map = new ConcurrentHashMap<>(16);
        map.computeIfAbsent(
                "AaAa",
                key -> {
                    return map.computeIfAbsent(
                            "BBBB",
                            key2 -> 42);
                }
        );

    }

    private static String[] arr = {""};
    private static int[] arr1 = {1};

    static int test() {
        System.out.println("evaluated ");
        return 0;
    }


}
